package cn.yinzhiping.mysecurity.core.entity;

import lombok.Data;
import lombok.extern.slf4j.Slf4j;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;

@Data
@Slf4j
public class TestConstructor {
    private String age;
    private String name;
    private String job;

    //创建类的方式可以new；默认使用无参构造，一旦创建有参构造，原来的默认无参构造会消失；
    //也可以使用反射来创建被private修饰构造器的类
    public static void main(String[] args) throws IllegalAccessException, InstantiationException, InvocationTargetException, NoSuchMethodException {
        //TestConstructor testConstructor = new TestConstructor("26","zdy111");
        //log.info("zdy的名字："+testConstructor.getName());
        TestConstructor testConstructor1 = TestConstructor.class.newInstance();
        //通过类.class的方式获取一个该类的Class实例
        Class hogClass = TestConstructor.class;
        //通过调用newInstance()方法获取一个Hog的实例， 该方法会返回一个Object类型的对象并且会抛出两个异常，
        TestConstructor hog = (TestConstructor) hogClass.newInstance();
        hog.getName();


        //通过类.class的方式获取一个该类的Class实例
        Class testConstructor = TestConstructor.class;
        //调用Class类的getConstructor()获得一个指定的构造器（参数为空则获得默认的构造器）对象   注意 获得的构造器得是被public修饰的
        Constructor constructor = (Constructor) hogClass.getConstructor();
        //调用Constructor的newInstance()方法获取一个Hog实例（注意要强转）
        TestConstructor hog1 = (TestConstructor) constructor.newInstance();
        hog1.getName();
    }
}
